<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        let arr=["方波","住的韩","梁泽圣","方慧"];
        // ES6 允许按照一定模式，从数组和对象中快速提取值，对变量进行赋值，这被称为解构（Destructuring）。
        // let name1=arr[1];
        // let name3=arr[3];
        //解构：根据被解析的数据解构解析数据
        // 1.基本解构（完全解构）
        // let [name0,name1,name2,name3]=arr;
        // console.log(name0,name1,name2,name3);

        // 2.不完全解构
        // let [,name1,,name3]=arr;
        // console.log(name1,name3);
        let [name1,name3]=arr;
        console.log(name1,name3);

        // 3.剩余解构
                // 剩余解构只对没有被取值的剩余数据进行数组包装
                // 剩余解构语法必须出现在解构模式中的最后一位
        let [username,...arrays]=["baby","cici","lili"];
        console.log(username);
        console.log(arrays);
        // let [...a,...b]=["baby","cici","lili"];//语法报错
        // console.log(a);
        // console.log(b);
        // let [a,...b,c]=["baby","cici","lili"];//语法报错

        //4.模式匹配失败
        let [aa]=[];
        console.log(aa);//变量获取默认值undefined
        //模式匹配失败对固定变量提供变量的默认值
        let [bb="杨超越",cc="朱忠祥",dd="方波"]=["Yamy"];
        console.log(bb,cc,dd);

        // 5.多维数组的嵌套解构
        let [,temp1,,[,temp2]]=[
            "a",
            "b",
            "c",
            [
                "aa",
                "bb",
                "cc"
            ]
        ];
        console.log(temp1);
        console.log(temp2);

        //交换两个变量的值
        // let x=20;
        // let y=10;
        // // let temp=x;
        // // x=y;
        // // y=temp;

        // [y,x]=[x,y];
        // console.log("x的值："+x);
        // console.log("y的值："+y);
        
        let x=20;
        let y=10;
        // let temp=x;
        // x=y;
        // y=temp;

        [y,x]=[x,y];
        console.log("x的值："+x);
        console.log("y的值："+y);
        
    </script>
</head>
<body>
    
</body>
</html>